package com.luxsoft.siipap.migracion;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import com.luxsoft.siipap.model.core.Clase;
import com.luxsoft.siipap.model.core.Linea;
import com.luxsoft.siipap.model.core.Marca;
import com.luxsoft.siipap.model.core.Producto;
import com.luxsoft.siipap.model.core.Unidad;
import com.luxsoft.siipap.model.core.Producto.Presentacion;

public class ProductoMapper extends DefaultMapper{
	
	
	 

	@Override
	public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
		Producto p=(Producto)super.mapRow(rs, rowNum);
		//System.out.println("Mapeo: "+p);
		if(p.getPresentacion()==null){
			//System.out.println("Error: "+p);
			p.setPresentacion(Presentacion.EXTENDIDO);
		}
		//p.setInventariable(p.isActivoInventario());
		return p;
	}

	@Override
	protected Object convertColumnValue(String col, Object val) {
		if(val==null) return null;
		if("ESTADO".equalsIgnoreCase(col)){
			return "A".equals(val)?true:false;
		}else if("CLASIFICACION".equals(col)){
			return "L".equals(val)?true:false;
		}else if("AFECTAINVENTARIO".equals(col)){
			Number res=(Number)val;
			return res.intValue()==1?true:false;
		}else if("SUS_INVENTA".equals(col)){
			Number res=(Number)val;
			return res.intValue()==1?true:false;
		}else if("SUS_VENTAS".equals(col)){
			Number res=(Number)val;
			return res.intValue()==1?true:false;
		}else if("SUS_COMPRAS".equals(col)){
			Number res=(Number)val;
			return res.intValue()==1?true:false;
		}else if("PRECIONETO".equals(col)){
			Number res=(Number)val;
			return res.intValue()==1?"N":"B";
		}else if("NACIONAL".equals(col)){
			Number res=(Number)val;
			return res.intValue()==1?true:false;
		}else if("LINEA".equals(col)){
			return getLineas(val.toString());
		}else if("CLASE".equals(col)){
			return getClase(val.toString());
		}else if("MARCA".equals(col)){
			return getMarca(val.toString());
		}else if("UNIDAD".equals(col)){
			return getUnidad(val.toString());
		}else if("PRESENTACION".equals(col)){
			if(val==null)
				return Presentacion.EXTENDIDO;
			else if(val.toString().trim().startsWith("BOB"))
				return Presentacion.BOBINA;
			else if(val.toString().trim().startsWith("C"))
				return Presentacion.CORTADO;
			else if(val.toString().trim().startsWith("EX"))
				return Presentacion.EXTENDIDO;
			else if(val.toString().trim().startsWith("N/"))
				return Presentacion.EXTENDIDO;
			return Presentacion.EXTENDIDO;
		}else
			return super.convertColumnValue(col, val);
	}
	
	
	
	public Linea getLineas(String nombre){
		List<Linea> res=getHibernateTemlate().find("from Linea l where l.nombre=?",nombre);		
		if(res.isEmpty()){
			logger.info("Generando linea: "+nombre);
			return (Linea)getHibernateTemlate().merge(new Linea(nombre.toString().toUpperCase(),nombre.toString().toUpperCase()));
		}else
			return (Linea)res.get(0);
		
	}
	
	public Clase getClase(String nombre){
		List<Clase> res=getHibernateTemlate().find("from Clase l where l.nombre=?",nombre);
		if(res.isEmpty()){
			return (Clase)getHibernateTemlate().merge(new Clase(nombre.toString().toUpperCase()));
		}else
			return (Clase)res.get(0);
	}
	
	public Marca getMarca(String nombre){
		List<Marca> res=getHibernateTemlate().find("from Marca l where l.nombre=?",nombre);
		if(res.isEmpty()){
			return (Marca)getHibernateTemlate().merge(new Marca(nombre.toString().toUpperCase()));
		}else
			return (Marca)res.get(0);
	}
	
	public Unidad getUnidad(String clave){
		return (Unidad)getHibernateTemlate().load(Unidad.class, clave);
	}

}
